这段时间在AIOT小组支援,需要做一个在工控机(ubuntu系统)上运行的HTTP服务,用Golang实现,使用sqlite3作为存储。
在 macOS 上编译 Linux 可执行文件时,遇到了一些坑,这里做下记录。
1 | $ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./httpServer ./ |
编译没有任何问题,可真正到工控机上运行的时候,报了 go-sqlite3 包未 import 的问题。
models setup fail err:sql: unknown driver “sqlite3” (forgotten import?)
查了一下,
go-sqlite3 is cgo module. so you need to install cross C compiler.
大意是go-sqlite包使用了CGO module,所以编译时要开启CGO_ENABLED,即1
CGO_ENABLED=1
还需要安装C交叉编译器1
$ brew install FiloSottile/musl-cross/musl-cross
这个安装耗时比较久,大概要40分钟(我的本子风扇会呼啦啦转,发热严重),但请耐心等待安装完成。
然后使用下面的命令就可以编译成功了!!!1
CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ GOARCH=amd64 GOOS=linux CGO_ENABLED=1 go build -ldflags "-linkmode external -extldflags -static" -o ./httpServer ./
参考: